perm filename APP4[AIM,DBL] blob
sn#141984 filedate 1975-01-25 generic text, type T, neo UTF8
00100 .DEVICE XGP
00200 .FONT 1 "NGR20"
00300 .FONT 2 "SIGN57"
00400 .FONT 3 "SHD40"
00500 .FONT 4 "BDI25"
00600 .FONT 5 "GRFX25"
00700 .FONT 6 "FIX25"
00800 .PAGE FRAME 69 HIGH 130 WIDE
00900 .AREA TEXT LINES 4 TO 67 IN 1 COLUMNS 130 WIDE
01000 .TITLE AREA HEADING LINES 1 TO 3 IN 1 COLUMNS 75 WIDE
01100 .TITLE AREA FOOTING LINE 69 IN 1 COLUMNS 75 WIDE
01200 .TURN ON "↓_π{"
01300 .TURN ON "\" FOR "%"
01400 .MACRO B ⊂ BEGIN VERBATIM GROUP ⊃
01500 .MACRO E ⊂ APART END ⊃
01600 .TABBREAK
01700 .COMPACT
01800 .EVERY FOOTING(Fourth Draft .... {DATE},page A4.{IF PAGE = 1 THEN 1 ELSE PAGE},CF Program excerpts\*)
01900 .EVERY HEADING(\3BEINGS\*,,\4Doug Lenat\*)
02000 .COUNT PAGE PRINTING "1"
02100 .NEXT PAGE
02200
02300 \2APPENDIX 4. \* \3CF .... PROGRAM\*
02400
00100 .SELECT 6
00200 .NOFILL
00300
00400
00500
00600 This appendix opens a detailed example of PUP6 in operation.
00700 Fragments of the target concept formation program are exhibited, and
00800 on page A4.7 is a flowchart for a hand-coded version of CF, the
00900 target concept formation program discussed earlier. Like PUP6, both
01000 hand-coded and synthesized versions of CF are written in INTERLISP
01100 [Teitelman, 197?] with slight additions (setdifference, disk-dump,
01200 etc.) only. Following each hand-coded piece comes the
01300 corresponding BEING version created by PUP6. Some functions
01400 mentioned are system functions used to augment the language (e.g.,
01500 MATCH.) A few functions have been omitted to aid in readability
01600 (e.g., VECTOR and TUPLE, which are inverse quote forms of the
01700 function LIST). The reader should examine the META:CODE sections of
01800 each BEING; they contain much of the \4executable\* code of the BEING.
01900 The choice of functions, while not a random sample, is not
02000 intentionally biassed. The opening, top-level functions are shown (by
02100 hand and by PUP6), and then a very low-level maintenance function
02200 (delete a feature from the NO relations of a model) is exhibited.
02300
02400 The next phase of the extended CF example is found in Appendix 5.
02500 There is a transcript of the dialogue between the user and PUP6 which
02600 produced this synthesized code. User responses are italicized to ease
02700 the reading. Notice how the user may interrupt and ask PUP6 for
02800 clarification.
02900
03000 The sixth appendix section presents a session with this synthesized
03100 program itself running. During the exectution of CF, the user stops
03200 and occasionally asks it questions; the answers are at about the same
03300 level as those one gets from PUP6 itself during the dialogue.
00100 .SELECT 1
00200 .NOFILL
00300
00400
00500
00600 \4The top-level functions do initialization and repeatedly build up models:\*
00700
00800 (CF
00900 [LAMBDA NIL
01000 (INITIALIZE:1)
01100 (PARTITION:A:DOMAIN])
01200
01300 (INITIALIZE:1
01400 [LAMBDA NIL
01500 (SETQ YES:RELATIONS (QUOTE YES:RELATIONS))
01600 (SETQ NO:RELATIONS (QUOTE NO:RELATIONS))
01700 (SETQ MAYBE:RELATIONS (QUOTE MAYBE:RELATIONS))
01800 (SETQ CLASS:OBJECTS (QUOTE CLASS:OBJECTS))
01900 (SETQ CLASS:NAMES:ORDERING (QUOTE CLASS:NAMES:ORDERING))
02000 (SETQ IN (QUOTE IN))
02100 (SETQ UNTIL (QUOTE UNTIL))
02200 (SETQ CLASS:RELATIONS (QUOTE CLASS:RELATIONS))
02300 (SETQ DO (QUOTE DO))
02400 (SETQ FOR (QUOTE FOR))
02500 (SETQ FROM (QUOTE FROM))
02600 (SETQ TO (QUOTE TO))
02700 (SETQ USING (QUOTE USING))
02800 (SETQ LIST:OF:POSSIBLE:CLASS:NAMES NIL)
02900 (SETQ FILE:NAME (ASK:FOR:2])
03000
03100 \4The BEING version uses a list of initializations to do at LOAD time. Numeric
03200 suffixes merely indicate some of the new, specialized BEINGs' names.\*
03300
03400 (RPAQQ GLOBAL:INITIALIZATION:LIST (
03500 (SETQ TYPE:OF:C:F CLASSIFICATORY:CONCEPT:FORMATION)
03600 (SETQQ HALT HALT)
03700 (SETQQ NAME:OF:CLASS NAME:OF:CLASS)
03800 (SETQQ SET:OF:POSSIBLE:NAMES:OF:CLASS NIL)
03900 (SETQQ ALPHORDER ALPHORDER)
04000 (SETQQ NOTHING NOTHING)
04100 (SETQQ POSSIBLE:NAME:OF:CLASS POSSIBLE:NAME:OF:CLASS)
04200 (SETQQ MAYBE:RELNS:30 MAYBE:RELNS:30)
04300 (SETQQ YES:RELNS:28 YES:RELNS:28)
04400 (SETQQ ELEMENT:RELNS:15 ELEMENT:RELNS:15)
04500 (SETQQ NO:RELNS:29 NO:RELNS:29)
04600 (SETQQ POSSIBLE:NAME:OF:CLASS:OBJECTS:20 POSSIBLE:NAME:OF:CLASS:OBJECTS:20)
04700 (SETQQ ELEMENT:OBJECTS:11 ELEMENT:OBJECTS:11)
04800 (SETQQ CLASS:MAYBE:RELNS:37 CLASS:MAYBE:RELNS:37)
04900 (SETQQ CLASS:NO:RELNS:36 CLASS:NO:RELNS:36)
05000 (SETQQ CLASS:YES:RELNS:35 CLASS:YES:RELNS:35)
05100 (SETQQ CLASS:CLASSNAME:34 CLASS:CLASSNAME:34)
05200 (SETQQ CLASS:OBJECTS:33 CLASS:OBJECTS:33)
05300 (SETQQ ??? ???)))
05400
05500 (PUTPROPS CF:1 IDEN ((( ( (MEMBER LI (QUOTE ((CONCEPT FORMATION)
05600 (CF:1)
05700 (CONCEPT LEARNING)
05800 (FORM CONCEPTS)
05900 (LEARN CONCEPTS)
06000 (LEARNS CONCEPTS)
06100 (FORMS CONCEPTS))))))
06200 ( CF:1)))
06300 EXPLICIT:ARGS:CHECK T
06400 WHAT ( A SPECIALIZED BEING WHICH DOES
06500 ( LEARN HOW TO IMPOSE A CONCEPT STRUCTURING UPON A DOMAIN; LEARN HOW TO
06600 CHARACTERIZE, OR AT LEAST DISTINGUISH, VARIOUS CONCEPTS))
06700 HOW ( BY CHOOSING THE DESIRED TYPE OF CONCEPT FORMATION CALLED FOR, AND THEN CARRYING IT OUT)
06800 WHY ( CONCEPT:LEARNING IS NECESSARY TO CONCEPT KNOWLEDGE AND CONCEPT:FORMATION IS TOO GENERAL TO
06900 USE AS IT IS)
07000 MAIN:EFFECTS ((( ABLE PUP ( LEARN CONCEPTS))
07100 ( CF:1)))
07200 WHEN (((MEMBER TYPE:OF:C:F ABLE:PUP:LIST)
07300 -70
07400 ( BECAUSE IF WE CAN ALREADY DO ( TYPE:OF:C:F)
07500 THEN WE SHOULDNT TRY TO DO IT OVER AGAIN))
07600 ((MEMBER (QUOTE (CHARACTERIZE CLASSES))
07700 PUP:WANTS:LIST)
07800 88
07900 (QUOTE (BECAUSE CONCEPT FORMATION IS A GOOD WAY TO GET A CHARACTERIZATION OF CLASSES)))
08000 (T (COND (NEW:INFO:LIST -60)
08100 (T 40))
08200 (QUOTE (BECAUSE NEW INFORMATION MIGHT ALTER OUR COURSE OF ACTION))))
08300 \4META:CODE\* (TEMPORARILY (PAD:2))
08400 PRE:REQUISITES (( AWARE USER ( PUP IS ABOUT TO WORK ON CONCEPT FORMATION))
08500 ( AWARE USER ( THE TYPE OF CONCEPT FORMATION PUP IS ABOUT TO WORK ON IS
08600 ( TYPE:OF:C:F))))
08700 POST:REQUISITES (( AWARE USER ( PUP HAS THOUGHT ABOUT THE ( TYPE:OF:C:F)
08800 TYPE OF CONCEPT:FORMATION)))
08900 DEMONS ( INFERENCE:DEMONS ATTENTION:DEMONS)
09000 AFFECTS ()
09100 COMPLEXITY: (.8 .8 .8 .8 .1)
09200 GENERALIZATIONS (CONCEPT:FORMATION ATTEND LEARN INDUCTIVE:INFERENCE)
09300 SPECIALIZATIONS NIL
09400 ALTERNATIVES ((GRAMMATICAL:INFERENCE PATTERN:RECOGNITION SIMULATED:EVOLUTION))
09500 BEING T
09600 EXPLICIT:ARGS (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1))
09700
09800 \4Notice that both versions' CF functions just call PARTITION:A:DOMAIN\*
09900
10000 (PARTITION:A:DOMAIN
10100 [LAMBDA NIL
10200 (PROG NIL
10300 START:OF:SERIES
10400 (INPUT:1:ELEMENT)
10500 (COND
10600 ((HAS:NAME)
10700 (INPUT:2:CLASS:NAME))
10800 (T (DETERMINE:1:CLASS:NAME)))
10900 (COND
11000 ((EQUAL CLASS:NAME (QUOTE HALT))
11100 (HALT:1))
11200 (T (PRINT (QUOTE (I NOW KNOW)))
11300 [FOREACH (QUOTE NAME) IN LIST:OF:POSSIBLE:CLASS:NAMES
11400 DO (QUOTE (PROGN (PRINT NAME)
11500 [COND
11600 ((GETP NAME CLASS:OBJECTS)
11700 (PRIN1 (QUOTE "OBJECTS "))
11800 (PRINT (GETP NAME CLASS:OBJECTS]
11900 [COND
12000 ((GETP NAME YES:RELATIONS)
12100 (PRIN1 (QUOTE "MUST HAVE "))
12200 (PRINT (GETP NAME YES:RELATIONS]
12300 [COND
12400 ((GETP NAME NO:RELATIONS)
12500 (PRIN1 (QUOTE "MUSNT HAVE "))
12600 (PRINT (GETP NAME NO:RELATIONS]
12700 (COND
12800 ((GETP NAME MAYBE:RELATIONS)
12900 (PRIN1 (QUOTE "MAY HAVE "))
13000 (PRINT (GETP NAME
13100 MAYBE:RELATIONS]
13200 (GO START:OF:SERIES])
13300
13400 \4The BEING version of PARTITION is quite similar. Notice the use of comments:
13500 though written by PUP6 for its own use, they are also meaningful to the user.
13600 Below, \*ELEMENT\4 refers to a scene, and \*CLASS\4 refers to a concept model.\*
13700
13800 (PUTPROPS PAD:2
13900 IDEN ((( ( (MATCH ( PARTITION A DOMAIN)
14000 LI)))
14100 ( PAD:2))
14200 (( ( (MATCH ( DIVIDE A DOMAIN UP)
14300 LI)))
14400 ( PAD:2)))
14500 IMPLICIT:ARGS (PRESULT)
14600 EXPLICIT:ARGS:CHECK T
14700 WHAT ( A SPECIALIZED BEING WHICH DOES
14800 ( DIVIDE A DOMAIN INTO SUBDOMAINS; USUALLY THESE WILL BE DISJOINT, AND THEIR UNION
14900 WILL BE THE ENTIRE DOMAIN))
15000 HOW ( BY BUILDING UP THE PARTITION GRADUALLY, BY ADDING TO OUR KNOWLEDGE OF THE PARTITION ONE
15100 PAIR AT A TIME; HERE A PAIR IS <ELEMENT, CLASS:NAME>)
15200 WHY ( BECAUSE PUP MUST PARTITION A DOMAIN INTO CLASSES, AND
15300 PARTITION:A:DOMAIN IS TOO GENERAL TO USE AS IT IS)
15400 MAIN:EFFECTS ((( PARTITIONED DOMAIN)
15500 ( PAD:2)))
15600 WHEN ((PARTITIONED:DOMAIN:LIST -100 ( BECAUSE WE ALREADY HAVE PARTITIONED DOMAIN))
15700 ((NULL PARTITIONED:DOMAIN:LIST)
15800 20
15900 ( BECAUSE PUP HAS NOT YET PARTITIONED DOMAIN, SO IT IS PLAUSIBLE TO DO IT NOW)))
16000 \4META:CODE\* (PROG NIL
16100 LABEL:1
16200 (TAKE:HOLD:OF:3 ELEMENT:4)
16300 (COND ((HAS:NAME:5 ELEMENT:4 (COMMENT PARTITION:BY:TAKE:ELE:AND:CLASS))
16400 (TAKE:HOLD:OF:6 NAME:OF:CLASS)
16500 (MODIFY:STRUCTURE:7 NAME:OF:CLASS))
16600 (T (GET:HOLD:OF:8 NAME:OF:CLASS)
16700 (MODIFY:STRUCTURE:9 NAME:OF:CLASS)))
16800 (COND ((IS:OF:TYPE:61 ARG1 (COMMENT BREAKAWAY))
16900 (COMMENT FINALIZATION OF LOOP STARTING AT LABEL:1 MAY GO HERE))
17000 (T (FOREACH NAME IN SET:OF:POSSIBLE:NAMES:OF:CLASS DO
17100 (PROGN (PRINT NAME)
17200 (COND ((GETP NAME CLASS:OBJECTS:33)
17300 (PRIN1 "OBJECTS ")
17400 (PRINT (GETP NAME CLASS:OBJECTS:33))))
17500 (COND ((GETP NAME CLASS:YES:RELNS:35)
17600 (PRIN1 "MUST HAVE ")
17700 (PRINT (GETP NAME CLASS:YES:RELNS:35))))
17800 (COND ((GETP NAME CLASS:NO:RELNS:36)
17900 (PRINT (GETP NAME CLASS:NO:RELNS:36))))
18000 (COND ((GETP NAME CLASS:MAYBE:RELNS:37)
18100 (PRIN1 "MAY HAVE ")
18200 (PRINT (GETP NAME CLASS:MAYBE:RELNS:37))))
18300 (TERPRI)
18400 T))
18500 (GO LABEL:1)))
18600 (COMMENT SEE: THERE IS NO INFINITE LOOP IN THIS PROG AFTER ALL; WE ARE
18700 EXITING IT!))
18800 DEMONS ( FRINGE:OF:CONCIOUSNESS:DEMON)
18900 COMPLEXITY: (.8 .8 .8 .8 .1)
19000 GENERALIZATIONS (PARTITION:A:DOMAIN MAP BUILD:FUNCTION)
19100 SPECIALIZATIONS NIL
19200 ALTERNATIVES ( DIVIDE:UP DISCRETIZE)
19300 BEING T
19400 EXPLICIT:ARGS (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
19500 AFFECTS ( ( ELEMENT:4 POSSIBLE CALLED)
19600 ( ELEMENT:4 POSSIBLE CALLED)
19700 ( IN POSSIBLE CALLED)))
19800
19900 \4Here are the hand versions of INPUT:1:ELEMENT and HAS:NAME\*
20000
20100 (INPUT:1:ELEMENT
20200 [LAMBDA NIL
20300 (PRINT (QUOTE (I AM READY FOR A SCENE)))
20400 (SETQ ELEMENT (READ))
20500 (SETQ LIST:OF:OBJECTS:OF:ELEMENT (CORRESPONDING:OBJECTS:PART))
20600 (SETQ SET:OF:RELATIONS (CORRESPONDING:RELATIONS:PART))
20700 (SETQ CLASS:NAME (CAR ELEMENT])
20800
20900 (HAS:NAME
21000 [LAMBDA NIL
21100 (NOT (EQUAL (CAR ELEMENT)
21200 (QUOTE ?])
21300
21400 \4The PUP6 versions include extra BEINGS, STATIC:SCENE and ELEMENT, which
21500 have no control function; rather, their role is analogous to a data structure.
21600 PUP6 uses the name TAKE:HOLD:OF:3 instead of INPUT:1:ELEMENT.\*
21700
21800 (PUTPROPS STATIC:SCENE:10 IDEN ((( ( (EQUAL LI (LIST STATIC:SCENE:10))))
21900 ( STATIC:SCENE:10)))
22000 \4META:CODE\* (STRUCTURE (OBJECTS SET O)
22100 (CLASS:NAME NAME N)
22200 (STATIC RELATIONS S BETWEEN OBJECTS))
22300 COMPLEXITY: (.8 .8 .8 .8 .1)
22400 DATA:STRUCTURE T
22500 BEING T
22600 WHAT ( A SPECIALIZED BEING WHICH DOES NIL)
22700 WHY (SCENE IS TOO GENERAL TO USE AS IT IS)
22800 GENERALIZATIONS (SCENE)
22900 (PUTPROPS ELEMENT:4 IDEN ((( ( (EQUAL ( ELEMENT:4)
23000 LI)))
23100 ( ELEMENT:4)))
23200 EXPLICIT:ARGS:CHECK T
23300 WHAT ( A SPECIALIZED BEING WHICH DOES
23400 ( A STRUCTURE WHICH IS A MEMBER OF A LARGER STRUCTURE))
23500 COMPLEXITY: (.8 .8 .8 .8 .1)
23600 DATA:STRUCTURE (ACCESS (((SOME:PART:OF:16 X)
23700 ACCESSES
23800 (STATIC RELATIONS S BETWEEN OBJECTS))
23900 ((SOME:PART:OF:14 X)
24000 ACCESSES
24100 (CLASS:NAME NAME N))
24200 ((SOME:PART:OF:12 X)
24300 ACCESSES
24400 (OBJECTS SET O))))
24500 BEING T
24600 EXPLICIT:ARGS (DUMMY:ARGUMENT:3 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
24700 WHY (ELEMENT IS TOO GENERAL TO USE AS IT IS)
24800 \4META:CODE\* (STRUCTURE (OBJECTS SET ELEMENT:OBJECTS:11)
24900 (CLASS:NAME NAME ELEMENT:CLASSNAME:13)
25000 (STATIC RELATIONS ELEMENT:RELNS:15 BETWEEN OBJECTS))
25100 GENERALIZATIONS (ELEMENT)
25200 (PUTPROPS HAS:NAME:5 EXPLICIT:ARGS (ARG1 DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
25300 EXPLICIT:ARGS:CHECK T
25400 WHAT ( A SPECIALIZED BEING WHICH DOES ( SEE IF ( ARG1)
25500 IS OF THE TYPE SPECIFIED. THE PARTICULAR TYPE
25600 IS DELINEATED BY THE SPECIAL KNOWLEDGE
25700 ( DUMMY:ARGUMENT:2)))
25800 HOW ( USE ( DUMMY:ARGUMENT:2)
25900 DETAILS TO SEE IF IT CONTAINS ( ARG1))
26000 WHY ( WE MUST BE ABLE TO TEST AN ARG1 ( ARG1)
26100 AND SEE IF IT BELONGS TO THE TYPE ( DUMMY:ARGUMENT:2)
26200 AND IS:OF:TYPE IS TOO GENERAL TO USE AS IT IS)
26300 \4META:CODE\* (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:4)
26400 (NOT (EQUAL (CAR ARG1)
26500 ???)))
26600 COMPLEXITY: (.8 .8 .8 .8 .1)
26700 SPECIALIZATIONS NIL
26800 PREDICATE T
26900 BEING T
27000 GENERALIZATIONS (IS:OF:TYPE)
27100 AFFECTS ( ( IN POSSIBLE CALLED)
27200 ( ELEMENT:4 POSSIBLE CALLED)))
27300 (PUTPROPS TAKE:HOLD:OF:3 EXPLICIT:ARGS (ARG1)
27400 EXPLICIT:ARGS:CHECK T
27500 NLAMBDA T
27600 WHAT ( A SPECIALIZED BEING WHICH DOES ( TAKE THE ARG1 ( ARG1)
27700 IN A TRIVIAL WAY; EITHER BY ACCESSING IT
27800 OR BY READING IT IN))
27900 HOW ( LOOK AROUND A LITTLE; IF IT ISNT FOUND TRIVIALLY, THEN ASK THE USER TO GIVE
28000 ( ARG1)
28100 TO US)
28200 WHY ( PUP WANTS ( ARG1)
28300 ,AND WE DON'T HAVE TO DO ANY COMPUTING TO GET IT AND TAKE:HOLD:OF IS TOO GENERAL
28400 TO USE AS IT IS)
28500 COMPLEXITY: (.8 .8 .8 .8 .1)
28600 BEING T
28700 \4META:CODE\* (PROGN (COMMENT IN ALL CALLS TO DATE, ARG1 IS INSTANTIATED AS ELEMENT:4)
28800 (PROGN (PRINT (COMMENT READY TO ACCEPT BRAND NEW ELEMENT:4))
28900 (SET ARG1 (READ))
29000 (SETQ ELEMENT:OBJECTS:11 (SOME:PART:OF:12 (EVAL ARG1)))
29100 (SETQ ELEMENT:CLASSNAME:13 (SOME:PART:OF:14 (EVAL ARG1)))
29200 (SETQ ELEMENT:RELNS:15 (SOME:PART:OF:16 (EVAL ARG1)))
29300 T))
29400 GENERALIZATIONS (TAKE:HOLD:OF)
29500 AFFECTS (
29600 ( ELEMENT:4 POSSIBLE CALLED)
29700
29800 ( ELEMENT:OBJECTS:11 POSSIBLE CALLED)
29900 ( ELEMENT:CLASSNAME:13 POSSIBLE CALLED)
30000 ( ELEMENT:RELNS:15 POSSIBLE CALLED)))
30100
30200 \4The following is a very low-level function found in the hand-coded version,
30300 which must insert a key contradictory feature into a model's set of NO relations.\*
30400
30500 (DELETE:1:3:1
30600 [LAMBDA NIL
30700 (PROG (TEMPORARY:NO:RELATIONS)
30800 (SETQ TEMPORARY:NO:RELATIONS (GETP CLASS:NAME NO:RELATIONS))
30900 (SETQ TEMPORARY:NO:RELATIONS (PULLOUT RELATION
31000 TEMPORARY:NO:RELATIONS))
31100 (PUT CLASS:NAME NO:RELATIONS TEMPORARY:NO:RELATIONS])
31200
31300 \4The version PUP6 writes includes the test as well: there must be
31400 some feature in the current NO relations set which is also present
31500 in the scene (that is, located on the list ELEMENT:RELNS:15).\*
31600
31700 (PUTPROPS CONDITIONAL:DELETION:54 IDEN ((( ( ( ( ( (EQUAL (CAR LI)
31800 (QUOTE DELETE)))))))
31900 ( CONDITIONAL:DELETION:54 (TRANSLATE (IN (CDR LI))
32000 T))))
32100 EXPLICIT:ARGS (DUMMY:ARGUMENT:2 DUMMY:ARGUMENT:1)
32200 EXPLICIT:ARGS:CHECK T
32300 WHAT ( A SPECIALIZED BEING WHICH DOES
32400 ( PERHAPS WE WILL REMOVE AN ELEMENT FROM CLASS:NO:RELNS:29 ,
32500 SOMETHING IN BOTH ELEMENT:RELNS:15
32600 AND ALREADY ON THE CLASS:NO:RELNS:29 LIST
32700 IF SUCH AN ENTITY CAN BE FOUND))
32800 HOW ( WE WILL SEARCH FOR SUCH AN ELEMENT, AND USE PULLOUT)
32900 WHY ( IT WOULD BE CONTRADICTORY FOR SUCH AN ELEMENT TO REMAIN ON THIS LIST
33000 IF IT IS ON THE LIST AND ALSO ON THE ELEMENT:RELNS:15 LIST AT THE SAME
33100 TIME. WE HAD TO SPECIALIZE TO THE CONDITIONAL:DELETION BEING BECAUSE
33200 CONDITIONAL:DELETION IS TOO GENERAL TO USE AS IT IS)
33300 \4META:CODE\* (PROGN (SETQ RESULT:6 (SETINTERSECTION (GETP NAME:OF:CLASS
33400 CLASS:NO:RELNS:36)
33500 ELEMENT:RELNS:15))
33600 (COND (RESULT:6 (PUT NAME:OF:CLASS CLASS:NO:RELNS:36
33700 (PULLOUT RESULT:6 (GETP NAME:OF:CLASS
33800 CLASS:NO:RELNS:36))))
33900 (T (SETQ RESULT:6 NIL))))
34000 COMPLEXITY: (.8 .8 .8 .8 .1)
34100 GENERALIZATIONS (CONDITIONAL:DELETION MODIFY:STRUCTURE)
34200 BEING T
34300 AFFECTS ( ( ELEMENT:RELNS:15 POSSIBLE CALLED)))
00100 .NEXT PAGE
00200 .SELECT 5
00300 \4FLOW CHART OF TARGET PROGRAM (CF), INCLUDING NAMES OF MAJOR FUNCTIONS\*
00400 .B
00500
00600 ⊂αααα⊃ ⊂ααααααααααααααααααααααα⊃
00700 ~ CF εααααα→λ (INITIALIZE:1) ~
00800 %αααα$ %ααααααααααπαααααααααααα$
00900 ~
01000 ~ enter the PARTITION:A:DOMAIN loop
01100 ~
01200 ⊂α⊃ ⊂αααααααααα↓αααααααααααα⊃
01300 ~1εααα→λ Accept the description~
01400 %α$ ~ of a scene ~ ⊂α⊃
01500 ⊂αααααααααα→λ (INPUT:1:ELEMENT) ~ ~2~
01600 ~ %ααααααααααπαααααααααααα$ %π$
01700 ~ ~ ~
01800 ~ ~ ~
01900 ~ ⊂αααααααααα↓αααααααααααα⊃ ⊂αααααααααα↓αααααααααααα⊃
02000 ~ ~ Does the scene have a ~ YES ~ Has the scene been ~ YES
02100 ~ ~ name? εαααα→λ previously described? εααααα⊃
02200 ~ ~ (HAS:NAME) ~ ⊂α→λ(CHECKαFORαOLDαNAME) ~ ↓
02300 ~ %ααααααααααπαααααααααααα$ ↑ %ααααααααααπαααααααααααα$ ~
02400 ~ ~NO ~ ~NO ~
02500 ~ ~ ~ ~ ~
02600 ~ ~ ~ ⊂αααααααααα↓αααααααααααα⊃ ~
02700 ~ ~ ~ ~ Insert the description~ ~
02800 ~ ~ (NOαGUESS)~ ~ of the scene in the ~ ~
02900 ~ ~ AND SCENE~ ~ object list ~ ~
03000 ~ ~ DEFINED ~ ~ (NEWαNAME) ~ ~
03100 ~ ~ ⊂αααα$ %ααααααααααπαααααααααααα$ ~
03200 ~ ~ ~ ~ ~
03300 ~ ~ ~ ~ ~
03400 ~(NOαGUESS) ⊂αααααααααα↓αααααααααα↑α⊃ ⊂↓⊃ ~
03500 ~AND SCENE ~ Make a guess at what ~ GUESS ~1~ ~
03600 ~UNDEFINED ~the object is, based on~ CORRECTLY %↑$ ~
03700 ~←ααααααααααλ previous scenes ε→αααααααα⊃ ~ ~
03800 ~ ~ (DETERMINE:CLASSNAME) ~ ~ ~ ~
03900 ~ %ααααααααααααααααααααααα$ ⊂αα↓αααααα↑ααααααααααααα⊃ ~
04000 ~ ~MADE WRONG ~ Correlate this scene ~ ~
04100 ~ ~GUESS ~ with other scenes ~←ααα$
04200 ~ ⊂αααααααααα↓αααααααααααα⊃ ~(PATCHαOLDαDESCRIPTION)~
04300 ~SCENE ~ Put in MUSTs and ~ %ααααααααααααααααααααααα$
04400 ~UNDEFINED ~ MUSTNOTs on scene ~ ⊂α⊃
04500 %αααααααααα←λ differences εαα→λ2~
04600 ~ (TIGHTENαCONSTRAINTS) ~ %α$
04700 %ααααααααααααααααααααααα$
04800 .E